//package com.smrtcold.dev.task;
//
//import com.alibaba.fastjson.JSONObject;
//import com.smrtcold.dev.config.MqttBase;
//import com.smrtcold.dev.dto.dev.DevTask;
//import com.smrtcold.dev.dto.dev.Point;
//import com.smrtcold.dev.dto.dev.PointGroup;
//import com.smrtcold.dev.dto.dev.XMZDevInfo;
//import com.smrtcold.dev.dto.task.defrost.DefrostTask;
//import com.smrtcold.dev.init.SystemInit;
//import com.smrtcold.dev.mapper.DataMapper;
//import com.smrtcold.dev.service.base.DefrostMode1Service;
//import com.smrtcold.dev.utils.Utils;
//import lombok.extern.log4j.Log4j2;
//import org.quartz.Job;
//import org.quartz.JobExecutionContext;
//import org.quartz.JobExecutionException;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Service;
//
//import java.time.LocalTime;
//import java.util.HashMap;
//import java.util.List;
//
//
///**
// * 化霜任务
// */
//@Log4j2
//@Service
//public class SetFrostJob1 implements Job {
//
//
//    private Long mid = 0L;
//
//    private Long taskid;
//
//    private int status = 0;
//    @Value("${sys.apid}")
//    private String apid;
//
//
//    private List<String> runtime;
//
//    @Autowired
//    private DataMapper dataMapper;
//
//    @Autowired
//    private MqttBase.DevOperation devOperation;
//
//
//    @Autowired
//    private DefrostMode1Service defrostMode1Service;
//
//
//    private boolean push(String topic, String data) {
//        try {
//            this.devOperation.push(topic, data);
//            return true;
//        } catch (Exception e) {
//            e.printStackTrace();
//            log.warn("推送消息失败：{}，内容：{}", topic, data);
//        }
//        return false;
//    }
//
//    @Override
//    public void execute(JobExecutionContext context) throws JobExecutionException {
//        StringBuffer logContert = new StringBuffer();
//        DevTask task = (DevTask) context.getJobDetail().getJobDataMap().get("TASK");
//        this.taskid = task.getId();
//        this.mid = task.getMid();
//        this.runtime = task.getRuntime();
//        try {
//            boolean isallSuccess = this.run(logContert, task);
//            status = 1;
//            if (logContert.length() > 5) {
//                push(String.format("HMI/%s/task/log/%s/%s", apid, mid, taskid), logContert.toString());
//            }
//        } catch (Exception e) {
//            status = 0;
//            log.error("任务执行失败：{}", e.getMessage());
//            logContert.append(e.getMessage());
//            //            todo 推送异常日志
//            // push(String.format("HMI/%s/%s/log", apid, taskid), logContert.toString());
//        }
//        if (logContert.length() > 5) {
//            this.dataMapper.addlog(taskid, status, 0, logContert.toString());
//        }
//    }
//
//    /**
//     * 执行任务
//     *
//     * @param logContert
//     * @param
//     * @throws Exception
//     */
//    private boolean run(StringBuffer logContert, DevTask task) throws Exception {
//        String parameters = task.getParameters();
//        List<PointGroup> pointGroups = JSONObject.parseArray(parameters, PointGroup.class);
//        int successCount = 0, errorCount = 0;
//        log.info("{}开始执行----------------", task.getName());
//
//
////        for (PointGroup pointGroup : pointGroups) {
////            if (this.setParameters(logContert, pointGroup)) {
////                successCount++;
////            } else {
////                errorCount++;
////            }
////        }
//        return successCount == pointGroups.size();
//
//    }
//
//    /**
//     * 获取库温设定参数
//     *
//     * @param logContert
//     * @param pointGroup
//     * @throws Exception
//     */
//    public boolean setParameters(StringBuffer logContert, PointGroup pointGroup) {
//        XMZDevInfo xmzDevInfo = SystemInit.get(pointGroup.getDevid());
//        if (null == xmzDevInfo) return false;
//        try {
//            //处理前置参数
//            HashMap<String, Number> confval = new HashMap<>();
//            HashMap<String, Object> params = new HashMap<>();
//            if (null != pointGroup.getExtParams() && pointGroup.getExtParams().size() > 0) {
//                params = new HashMap<>(pointGroup.getExtParams());
//                confval = this.setFrost(xmzDevInfo, params);
//            }
//
//            int mode = params.containsKey("mode") ? Integer.parseInt(params.remove("mode").toString()) : 0;// 使用的化霜模型
//            if (0 == mode) {
//                //获取化霜参数---
//                //这里需要判断--启用了平谷峰尖，或者定时了
//                if (null == this.runtime || this.runtime.size() == 0) {
//                    logContert.append(pointGroup.getName() + "执行失败：未设置运行时间\r\n");
//                    return false;
//                }
//                this.mode1(logContert, pointGroup, confval, params);
//            }
//            return true;
//        } catch (Exception e) {
//            logContert.append(pointGroup.getName() + "执行失败：" + e.getMessage() + "\r\n");
//            try {
//                xmzDevInfo.checkStatus();
//            } catch (Exception ex) {
//                ex.printStackTrace();
//            }
//            log.error("设置{}点位失败：{}", pointGroup.getName(), e.getMessage());
//            logContert.append(pointGroup.getName() + "执行失败：" + e.getMessage() + "\r\n");
//        }
//        return false;
//    }
//
//    private HashMap<String, Number> setFrost(XMZDevInfo xmzDevInfo, HashMap<String, Object> params) throws Exception {
//        HashMap<String, Number> data = new HashMap<>();
//        for (String k : params.keySet()) {
//            if (k.startsWith("pr_")) {
//                Point p = JSONObject.parseObject(params.get(k).toString(), Point.class);
//                data.put(k, xmzDevInfo.readPoint(p));
//            } else {
//                data.put(k, Double.parseDouble(params.get(k).toString()));
//            }
//        }
//        return data;
//    }
//
//
//    /**
//     * 化霜模型1........................................................
//     *
//     * @param pointGroup
//     * @param confval
//     * @param params
//     */
//    private void mode1(StringBuffer logContert, PointGroup pointGroup, HashMap<String, Number> confval, HashMap<String, Object> params) throws Exception {
//        List<Point> points = pointGroup.getPoints();
//        int size = points.size();
//        Integer difruntiem = confval.get("pr_除霜运行时间").intValue();//
//       int interval=   confval.containsKey("interval")? confval.get("interval").intValue() : 0;
//        int maxrun = params.containsKey("maxrun") ? Integer.parseInt(params.remove("maxrun").toString()) : 1;//最大运行风机数量
//        int sumdiftime = size * (difruntiem+interval);//总化霜时间
//
//        String res = String.format("化霜时间段：%s,设定化霜时间：%s，间隔时间：%s,计划总时间：%s,同时化霜数量：%s", Utils.GSON.toJson(this.runtime),  difruntiem,interval, sumdiftime,maxrun);
//        log.info(res);
//        logContert.append(res + "\r\n");
//        //todo 时间控制
//        XMZDevInfo xmzDevInfo = SystemInit.get(pointGroup.getDevid());
//
//
//
//
//
//        List<DefrostTask> tasks = this.defrostMode1Service.scheduleDefrost(this.runtime, difruntiem+interval, maxrun, points);
//        for (DefrostTask task : tasks) {
//            Point fan = task.getFan();
//            String[] split = fan.getAddres().split(",");
//            //获取小时,分钟设定
//            Number hour = xmzDevInfo.readAddres(split[0]), minute = xmzDevInfo.readAddres(split[1]);
//            res = String.format("读取风机%s的设定时间：%s:%s-->", fan.getName(), hour, minute);
//            log.info(res);
//            logContert.append(res );
//            LocalTime startTime = task.getStartTime();
//            //判断时间是否需要重新设定
//            if (startTime.getHour() != hour.intValue() || startTime.getMinute() != minute.intValue()) {
////                xmzDevInfo.writeByAddres(split[0], startTime.getHour());
//                if(pointGroup.getName().indexOf("西冷冻库") == 0) {
//                    xmzDevInfo.writeByAddres(split[1], minute.intValue() - 1);
//                }
////                res = String.format("设置风机%s的运行时间：%s:%s", fan.getName(), startTime.getHour(), startTime.getMinute());//
//                res = String.format("设置风机%s的运行时间：%s:%s", fan.getName(), hour,minute.intValue()-1);//
//                log.info(res);
//                logContert.append(res + "\r\n");
//            } else {
//                res = "化霜时间未变更";
//                log.info(res);
//                logContert.append(res + "\r\n");
//            }
//        }
//    }
//
//}
